package app;



import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.GregorianCalendar;

import org.apache.commons.lang.WordUtils;
import org.jsoup.Jsoup;
import org.jsoup.select.Elements;
import org.springframework.beans.factory.annotation.Autowired;

import services.EventoServiceIntf;
import services.TipoServiceImpl;
import clases.Evento;
import clases.Tipo;
import constantes.Constantes;


public class Descargas {
	
	@Autowired
	EventoServiceIntf EventoService;
	
	@Autowired
	TipoServiceImpl TipoService;
	
	
	
	public Boolean AñadeDia(String fecha){
		try{
			//la fecha debe ir en formato 08-02-2013
			String URLs = Constantes.URL_DESCARGA+fecha;
			java.net.URL url = new URL(URLs);
			org.jsoup.nodes.Document doc = Jsoup.parse(url,1000000);
			Elements tabla = doc.getElementsByTag("table");
			for (org.jsoup.nodes.Element tablaelm : tabla) {
				Elements tr = tablaelm.getElementsByTag("tr");
				for(org.jsoup.nodes.Element trelm : tr){
					Elements td = trelm.getElementsByTag("td");
					String Hora = td.get(0).text();
					String Url = td.get(1).getElementsByTag("a").get(0).attr("href");
					String Tipo = td.get(1).getElementsByTag("a").get(0).attr("style");
					String Nombre = td.get(1).getElementsByTag("a").get(0).text();
					String Lugar = td.get(2).text();
					String Precio = td.get(3).text();
					String Caracteristica = td.get(3).getElementsByTag("img").attr("title");
					Caracteristica = WordUtils.capitalize(Caracteristica);
					Evento nuevoEvento = new Evento();
					nuevoEvento.setUrl(Url);
					nuevoEvento.setTipo(dameTipo(Tipo));
					SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy hh:mm" );
					nuevoEvento.setFecha(sdf.parse(fecha+" "+Hora));//incluira fecha y hora
					nuevoEvento.setNombre(Nombre);
					nuevoEvento.setLugar(Lugar);
					if(Precio.trim().isEmpty()){
						nuevoEvento.setPrecio(Constantes.PRECIO_VACIO);
					}else{
						nuevoEvento.setPrecio(Precio);
					}
					nuevoEvento.setCaracteristica(Caracteristica);
					nuevoEvento.setIdAu(new Long(Url.split("evento/")[1].split("_")[0]));
					EventoService.persistIfPosible(nuevoEvento);
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return true;
	}
	
	private Tipo dameTipo(String tipo) {
		// TODO Auto-generated method stub
		Tipo tipe = new Tipo(tipo.split("_")[1].split(".gif")[0]);

		TipoService.persist(tipe);
		return tipe;
	}
		
	
	
	public void start(){
		SimpleDateFormat sdf = new SimpleDateFormat( "dd-MM-yyyy" ); 

		GregorianCalendar fecha = new GregorianCalendar();
		
		for (int i = 0; i < Constantes.NUMERO_DIAS_DESCARGA; i++) {
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			System.out.println("DIA - > "+fecha.toString());
			AñadeDia(sdf.format(fecha.getTime()));
			fecha.add(java.util.Calendar.DAY_OF_MONTH, 1);

		}
		System.out.println("SINC ended...");
	}
	
}
